import axios from "axios";
import qs from "qs";

// 创建axios实例 
const instance = axios.create({
    // baseURL: host,  //公共接口路径,有了跨域将不再使用
    // timeout 超时时间
    timeout: 5000
});

// 请求拦截器
instance.interceptors.request.use(
    config => {

        return config
    },
    error => {
        // do something with request error
        console.log(error) // for debug
        return Promise.reject(error)
    }
)


// 响应拦截器  
instance.interceptors.response.use(

    response => {
        const res = response.data
        return res
    },
    error => {
        console.log('err' + error) // for debug
        return Promise.reject(error)
    }
)

//请求类型封装
function http(configOptions) {
    var config = {}
    config.url = configOptions.url
    if (configOptions.method.toLowerCase() == 'get') {
        // 针对get处理 参数应该放到params中
        config.method = 'get'
        config.params = configOptions.data
    } else if (configOptions.method.toLowerCase() == 'post') {
        config.method = 'post'
            // post提交设置请求头
        config.headers = { 'content-type': 'application/x-www-form-urlencoded' };
        // 需要用qs对数据进行序列化处理
        // 思考: 不处理会出现什么情况?以及数据提交的多种格式分别是什么?
        // 1.  { a: { b: { c: 'd', e: 'f' } } } ==> 'a.b.c=d&a.b.e=f'
        // 2. { a: ['b', 'c'] } ==> 'a=b&a=c'
        config.data = qs.stringify(configOptions.data, { allowDots: true, arrayFormat: 'repeat' })
    }
    // 转换后的config注入到axios中
    return instance(config)
}

export default http